import os
import sqlite3


def check_db_file_exists(db_path):
    """
    判断指定路径的 SQLite 数据库文件是否存在

    参数：
        db_path: 数据库文件的完整路径（例如："data/test.db"）
    返回：
        bool: 存在且为文件则返回 True，否则返回 False
    """
    # 检查路径是否存在，且是一个文件（不是目录）
    return os.path.exists(db_path) and os.path.isfile(db_path)


def check_table_exists(db_path, table_name):
    """
    判断 SQLite 数据库中是否存在指定名称的表

    参数：
        db_path: 数据库文件路径
        table_name: 要检查的表名
    返回：
        bool: 存在返回 True，不存在返回 False
    """
    try:
        # 连接数据库（若文件不存在，SQLite 会创建空文件，不影响判断）
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # 查询 sqlite_master 表，判断目标表是否存在
        # type='table' 表示只查用户表（排除视图等其他对象）
        cursor.execute(
            "SELECT 1 FROM sqlite_master WHERE type='table' AND name=?",
            (table_name,)  # 使用参数化查询，避免 SQL 注入风险
        )

        # 如果查询到结果（fetchone() 返回非 None），说明表存在
        exists = cursor.fetchone() is not None
        return exists

    except sqlite3.Error as e:
        print(f"判断表 {table_name} 是否存在时，执行数据库操作出错：{e}")
        return False  # 出错时默认返回不存在
    finally:
        if conn:
            conn.close()  # 确保连接关闭
